# -*- coding: utf-8 -*-
#解算模块
##################################
from kociemba.search import Search
import time
import os
from ctypes import *

print("开始加载DLL")
#获取DLL文件的绝对路径
dllPath=os.path.abspath(os.path.dirname(__file__))+"/CubeSolve.dll"
#加载C++版的解算DLL
dll=CDLL(dllPath);
print("DLL加载成功")

#进行颜色识别结果格式转换
def formatConvert(types):
	# 生成新序列
	newTypes=[];
	newTypes.append(types[0]);
	newTypes.append(types[5]);
	newTypes.append(types[2]);
	newTypes.append(types[1]);
	newTypes.append(types[4]);
	newTypes.append(types[3]);
	#生成解算格式的字符串
	str="UDFBLR";
	res=[];
	for side in newTypes:
		for num in side:
			res.append(str[num - 1]);
	# 返回字符串
	return  ''.join(res);

#进行解算
#默认使用C++版本
def resolve(types,version="c++"):
	if version=="c++":
		#使用C++版本的算法解算
		formatStr=formatConvert(types);
		data=bytes(formatStr,"gbk")
		solve=dll.solve
		solve.argtypes=[c_char_p] #参数类型
		solve.restype=c_char_p #声明返回类型
		res=c_char_p(solve(data)) #开始解算
		return str(res.value, encoding = "utf-8")
	elif version=="python":
		#使用python版本的解算算法
		formatStr=formatConvert(types);
		#最大解算时间设置的为10秒
		res=Search().solution(formatStr, 21, 5, 0);
		return res.replace(" ","");
